package tp.tecnicasdisenio.model.validador;

import tp.tecnicasdisenio.dao.MateriaDaoInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.parser.ParserTituloAltaMateria;
import tp.tecnicasdisenio.util.FechaUtil;

public class ValidadorAltaMateria extends ValidadorAbstract{

	private ParserTituloAltaMateria parserTituloAltaMateria;
	private MateriaDaoInterface materiaDao;
	
	/**
	 * Valida que la materia sobre la cual se desea dar de alta exista.
	 * Valida que el alumno no este inscripto en la materia.
	 */
	@Override
	public boolean valido(MailInterface mail, AutoRespondedorInterface autoRespondedor) {
		Alumno alumno= parserTituloAltaMateria.extraerAlumno(mail);
		Materia materia= parserTituloAltaMateria.extraerMateria(mail);
		
		if( !existe(materia) ){
			autoRespondedor.responderA(mail, "Mail inválido, materia inexistente.");
			System.out.println("Mail inválido, materia inexistente. Se responde mail.");
			return false;
		}
		
		if(alumnoDao.estaInscriptoEnMateria(alumno, materia, FechaUtil.getCuatrimestreActual())){
			autoRespondedor.responderA(mail, "Mail inválido, alumno ya se encuentra inscripto en materia.");
			System.out.println("Mail inválido, alumno ya se encuentra inscripto en materia. Se responde mail.");
			return false;
		}
		
		return true;
	}

	private boolean existe(Materia materia){
		return materiaDao.getPorId(materia.getId()) != null;
	}

	public MateriaDaoInterface getMateriaDao() {
		return materiaDao;
	}

	public void setMateriaDao(MateriaDaoInterface materiaDao) {
		this.materiaDao = materiaDao;
	}

	public ParserTituloAltaMateria getParserTituloAltaMateria() {
		return parserTituloAltaMateria;
	}

	public void setParserTituloAltaMateria(
			ParserTituloAltaMateria parserTituloAltaMateria) {
		this.parserTituloAltaMateria = parserTituloAltaMateria;
	}
	

	
}
